package xml;

import org.dom4j.*;
import org.dom4j.io.SAXReader;

import java.util.Iterator;
import java.util.List;
import java.util.jar.Attributes;

/**
 * Created by :Infaraway
 * DATE : 2017/3/8
 * Time : 17:34
 * Funtion : dom4j测试
 */
public class XmlUtils {

    /**
     * 返回一个Document对象
     * @return
     */
    public static Document getDocument(){

        //创建一个XML解析器
        SAXReader saxReader = new SAXReader();
        try {
            //读取Document对象
            Document document = null;
            document = saxReader.read("./src/xml/User.xml");
            return document;
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 遍历所有的标签节点
     * @param document
     */
    public static void gerAll(Document document){

        //获取XML文档的根标签
        Element rootElement = document.getRootElement();
        getChildNodes(rootElement);
    }

    /**
     * 递归获取传入标签下的所有子节点
     * @param element
     */
    public static void getChildNodes(Element element){
        System.out.println(element.getName());
        // 迭代器获取当前节点下的所有子节点
        Iterator<Node> it = element.nodeIterator();
        while (it.hasNext()){
            Node node = it.next();
            //1 判断是否是标签
            if (node instanceof Element){
                //如果仍然是标签节点，那个递归获取子节点
                getChildNodes((Element) node);
            }

        }
    }


    /**
     * 获取当前标签的指定名称的第一个子标签
     * @param element 当前标签
     */
    public static Element getElementByName(Element element, String elemName){

        //获取当前标签下的指定名称的第一个子标签
        Element elem = element.element(elemName);
        System.out.println(elem.getName());
        return elem;
    }

    /**
     * 获取当前标签下指定名称的所有子标签
     * @param element 当前标签
     * @param elemName 指定的名称
     */
    public static Iterator<Element> getElementsByName(Element element, String elemName){

        //获取当前标签下的指定名称的所有子标签
        Iterator<Element> itElement = element.elementIterator(elemName);
        while (itElement.hasNext()){
            Element elem = itElement.next();
            System.out.println(elem.getName());
        }
        return itElement;
    }

    /**
     * 获取当前标签下所有子标签
     * @param element 当前标签
     */
    public static List<Element> getElements(Element element){

        //获取当前标签下的指定名称的所有子标签
        List<Element> elementList = element.elements();
        for (Element elem : elementList) {
            System.out.println(elem.getName());
        }

        return elementList;
    }


    /**
     * 获取属性信息
     */


    /**
     * 根据属性名称获取指定的属性 和属性值
     * @param element 所在标签节点
     * @param attName 属性名
     */
    public static void getAttributeByName(Element element,String attName){

        //想要获取属性，首先要获取属性所在的标签 即传入的标签

        // 直接根据id获取属性值
        element.attributeValue(attName);

        // 获取attribute对象，然后获取name和value值
        Attribute attribute = element.attribute(attName);
        String str = attribute.getName() + "=" + attribute.getValue();
        System.out.println(str);
    }

    public static void getAttributes(Element element){

        List<Attribute> attributeList =  element.attributes();
        for (Attribute attribute : attributeList) {
            System.out.println( attribute.getName() + "="+ attribute.getValue() );
        }

        //Iterator<Attribute> itAttribute = element.attributeIterator();
    }


    /**
     * 获取文本信息
     */

    public static String getText(Element element){
        //注意：空格和换行也是xml的内容
        String text = element.getText();
        return text;
    }



}
